﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="PresenterFirstDSLSchema" targetNamespace="http://schemas.microsoft.com/dsltools/PresenterFirstDSL" elementFormDefault="qualified" xmlns="http://schemas.microsoft.com/dsltools/PresenterFirstDSL" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- PresenterFirstDSLRoot -->
  <xsd:element name="presenterFirstDSLRoot" type="PresenterFirstDSLRoot" />
  <xsd:complexType name="PresenterFirstDSLRoot">
    <xsd:annotation>
      <xsd:documentation>The root in which all other elements are embedded. Appears as a diagram.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: PresenterFirstDSLRootHasPresenter -->
      <xsd:element name="presenter" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instance of PresenterFirstDSLRootHasPresenter</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1" >
              <xsd:element ref="presenterFirstDSLRootHasPresenter">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from PresenterFirstDSLRootHasPresenter needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="presenter" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: PresenterFirstDSLRootHasModel -->
      <xsd:element name="model" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instance of PresenterFirstDSLRootHasModel</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1" >
              <xsd:element ref="presenterFirstDSLRootHasModel">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from PresenterFirstDSLRootHasModel needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="model" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: PresenterFirstDSLRootHasView -->
      <xsd:element name="view" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instance of PresenterFirstDSLRootHasView</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1" >
              <xsd:element ref="presenterFirstDSLRootHasView">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from PresenterFirstDSLRootHasView needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="view" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- dslVersion -->
    <xsd:attribute name="dslVersion" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Version of the model serialized in this file.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Namespace -->
    <xsd:attribute name="namespace" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Parent namespace for the generated presenter, model and view.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: NamespaceImports -->
    <xsd:attribute name="namespaceImports" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Semi-colon delimited list of namespaces to import in the generated code. The imported namespaces are applied to the generated model, view, and presenter as Imports (using in C#) statements.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: GenerateParameterlessConstructor -->
    <xsd:attribute name="generateParameterlessConstructor" type="xsd:boolean" >
      <xsd:annotation>
        <xsd:documentation>Generates a presenter constructor that creates instances of the View and Model classes. Appropriate for scenarios in which the view, model, and presenter are tightly coupled.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: GenerateDIConstructor -->
    <xsd:attribute name="generateDIConstructor" type="xsd:boolean" >
      <xsd:annotation>
        <xsd:documentation>Generates a presenter constructor that takes the view and model as parameters. Appropriate for dependency injection scenarios.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: GenerateConstructorWithViewParm -->
    <xsd:attribute name="generateConstructorWithViewParm" type="xsd:boolean" >
      <xsd:annotation>
        <xsd:documentation>Generates a presenter constructor that requires an IView parameter. Appropriate for controls in which the instance of the view is handling the creation of the presenter, and will pass itself into the constructor of the presenter.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: GenerateAbstractModel -->
    <xsd:attribute name="generateAbstractModel" type="xsd:boolean" >
      <xsd:annotation>
        <xsd:documentation>If true, generates an abstract base class for the model.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: GeneratePartialView -->
    <xsd:attribute name="generatePartialView" type="xsd:boolean" >
      <xsd:annotation>
        <xsd:documentation>If true, generates a partial view class. Will cause the code to not compile if the user has not provided a view implementation.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRoot Moniker -->
  <xsd:element name="presenterFirstDSLRootMoniker" type="PresenterFirstDSLRootMoniker" />
  <xsd:complexType name="PresenterFirstDSLRootMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PresenterFirstDSLRoot instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Actor -->
  <xsd:element name="actor" abstract="true" type="Actor" />
  <xsd:complexType name="Actor" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: ActorHasEvents -->
      <xsd:element name="events" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of ActorHasEvents</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="actorHasEvents">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from ActorHasEvents needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="event" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: ActorHasActions -->
      <xsd:element name="actions" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of ActorHasActions</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="actorHasActions">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from ActorHasActions needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="action" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- Actor Moniker -->
  <xsd:element name="actorMoniker" abstract="true" type="ActorMoniker" />
  <xsd:complexType name="ActorMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Actor instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- Model -->
  <xsd:element name="model" type="Model" substitutionGroup="actor" />
  <xsd:complexType name="Model">
    <xsd:complexContent>
      <xsd:extension base="Actor">
        <!-- Id -->
        <xsd:attribute name="Id" type="xsd:string">
          <xsd:annotation>
            <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Model Moniker -->
  <xsd:element name="modelMoniker" type="ModelMoniker" substitutionGroup="actorMoniker" />
  <xsd:complexType name="ModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Model instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="ActorMoniker">
        <xsd:attribute name="Id" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- View -->
  <xsd:element name="view" type="View" substitutionGroup="actor" />
  <xsd:complexType name="View">
    <xsd:complexContent>
      <xsd:extension base="Actor">
        <!-- Id -->
        <xsd:attribute name="Id" type="xsd:string">
          <xsd:annotation>
            <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- View Moniker -->
  <xsd:element name="viewMoniker" type="ViewMoniker" substitutionGroup="actorMoniker" />
  <xsd:complexType name="ViewMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for View instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="ActorMoniker">
        <xsd:attribute name="Id" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Action -->
  <xsd:element name="action" type="Action" />
  <xsd:complexType name="Action">
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" />
    <!-- Property: ExecutionOrder -->
    <xsd:attribute name="executionOrder" type="xsd:integer" >
      <xsd:annotation>
        <xsd:documentation>Sets the order of execution when there is more than one action for a feature.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Action Moniker -->
  <xsd:element name="actionMoniker" type="ActionMoniker" />
  <xsd:complexType name="ActionMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Action instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Event -->
  <xsd:element name="event" type="Event" />
  <xsd:complexType name="Event">
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" />
  </xsd:complexType>
  
  <!-- Event Moniker -->
  <xsd:element name="eventMoniker" type="EventMoniker" />
  <xsd:complexType name="EventMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Event instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Parameter -->
  <xsd:element name="parameter" type="Parameter" substitutionGroup="typedElement" />
  <xsd:complexType name="Parameter">
    <xsd:complexContent>
      <xsd:extension base="TypedElement">
        <!-- Property: Name -->
        <xsd:attribute name="name" type="xsd:string" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Parameter Moniker -->
  <xsd:element name="parameterMoniker" abstract="true" type="ParameterMoniker" substitutionGroup="typedElementMoniker" />
  <xsd:complexType name="ParameterMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Parameter instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypedElementMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Presenter -->
  <xsd:element name="presenter" type="Presenter" />
  <xsd:complexType name="Presenter">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: PresenterHasFeatures -->
      <xsd:element name="features" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of PresenterHasFeatures</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="unbounded" >
              <xsd:element ref="presenterHasFeatures">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from PresenterHasFeatures needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="feature" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: PresenterHasPropertyCollection -->
      <xsd:element name="propertyCollection" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instance of PresenterHasPropertyCollection</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1" >
              <xsd:element ref="presenterHasPropertyCollection">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from PresenterHasPropertyCollection needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="propertyCollection" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Presenter Moniker -->
  <xsd:element name="presenterMoniker" type="PresenterMoniker" />
  <xsd:complexType name="PresenterMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Presenter instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Feature -->
  <xsd:element name="feature" type="Feature" />
  <xsd:complexType name="Feature">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: FeatureHasParameters -->
      <xsd:element name="parameters" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of FeatureHasParameters</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="featureHasParameters">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from FeatureHasParameters needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="parameter" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: FeatureReferencesEvent -->
      <xsd:element name="event" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instance of FeatureReferencesEvent</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1" >
              <xsd:element ref="featureReferencesEvent">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from FeatureReferencesEvent needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="eventMoniker" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: FeatureReferencesActions -->
      <xsd:element name="actions" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of FeatureReferencesActions</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="unbounded" >
              <xsd:element ref="featureReferencesActions">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from FeatureReferencesActions needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="actionMoniker" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Documentation -->
    <xsd:attribute name="documentation" type="xsd:string" />
  </xsd:complexType>
  
  <!-- Feature Moniker -->
  <xsd:element name="featureMoniker" type="FeatureMoniker" />
  <xsd:complexType name="FeatureMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Feature instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- TypedElement -->
  <xsd:element name="typedElement" abstract="true" type="TypedElement" />
  <xsd:complexType name="TypedElement" abstract="true" >
    <!-- Property: Type -->
    <xsd:attribute name="type" type="TypeNameEnumeration" />
    <!-- Property: TypeName -->
    <xsd:attribute name="typeName" type="xsd:string" />
  </xsd:complexType>
  
  <!-- TypedElement Moniker -->
  <xsd:element name="typedElementMoniker" abstract="true" type="TypedElementMoniker" />
  <xsd:complexType name="TypedElementMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for TypedElement instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- Property -->
  <xsd:element name="property" type="Property" substitutionGroup="typedElement" />
  <xsd:complexType name="Property">
    <xsd:complexContent>
      <xsd:extension base="TypedElement">
        <!-- Property: Name -->
        <xsd:attribute name="name" type="xsd:string" use="required" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Property Moniker -->
  <xsd:element name="propertyMoniker" type="PropertyMoniker" substitutionGroup="typedElementMoniker" />
  <xsd:complexType name="PropertyMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Property instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypedElementMoniker">
        <xsd:attribute name="name" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- PropertyCollection -->
  <xsd:element name="propertyCollection" type="PropertyCollection" />
  <xsd:complexType name="PropertyCollection">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: PropertyCollectionHasProperties -->
      <xsd:element name="properties" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of PropertyCollectionHasProperties</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="propertyCollectionHasProperties">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from PropertyCollectionHasProperties needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="property" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- PropertyCollection Moniker -->
  <xsd:element name="propertyCollectionMoniker" type="PropertyCollectionMoniker" />
  <xsd:complexType name="PropertyCollectionMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PropertyCollection instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRootHasPresenter -->
  <xsd:element name="presenterFirstDSLRootHasPresenter" abstract="true" type="PresenterFirstDSLRootHasPresenter" />
  <xsd:complexType name="PresenterFirstDSLRootHasPresenter" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Presenter -->
      <xsd:element ref="presenter" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRootHasPresenter Moniker -->
  <xsd:element name="presenterFirstDSLRootHasPresenterMoniker" abstract="true" type="PresenterFirstDSLRootHasPresenterMoniker" />
  <xsd:complexType name="PresenterFirstDSLRootHasPresenterMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PresenterFirstDSLRootHasPresenter instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRootHasModel -->
  <xsd:element name="presenterFirstDSLRootHasModel" abstract="true" type="PresenterFirstDSLRootHasModel" />
  <xsd:complexType name="PresenterFirstDSLRootHasModel" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Model -->
      <xsd:element ref="model" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRootHasModel Moniker -->
  <xsd:element name="presenterFirstDSLRootHasModelMoniker" abstract="true" type="PresenterFirstDSLRootHasModelMoniker" />
  <xsd:complexType name="PresenterFirstDSLRootHasModelMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PresenterFirstDSLRootHasModel instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRootHasView -->
  <xsd:element name="presenterFirstDSLRootHasView" abstract="true" type="PresenterFirstDSLRootHasView" />
  <xsd:complexType name="PresenterFirstDSLRootHasView" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end View -->
      <xsd:element ref="view" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- PresenterFirstDSLRootHasView Moniker -->
  <xsd:element name="presenterFirstDSLRootHasViewMoniker" abstract="true" type="PresenterFirstDSLRootHasViewMoniker" />
  <xsd:complexType name="PresenterFirstDSLRootHasViewMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PresenterFirstDSLRootHasView instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- FeatureHasParameters -->
  <xsd:element name="featureHasParameters" abstract="true" type="FeatureHasParameters" />
  <xsd:complexType name="FeatureHasParameters" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Parameter -->
      <xsd:element ref="parameter" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- FeatureHasParameters Moniker -->
  <xsd:element name="featureHasParametersMoniker" abstract="true" type="FeatureHasParametersMoniker" />
  <xsd:complexType name="FeatureHasParametersMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FeatureHasParameters instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- PresenterHasFeatures -->
  <xsd:element name="presenterHasFeatures" abstract="true" type="PresenterHasFeatures" />
  <xsd:complexType name="PresenterHasFeatures" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Feature -->
      <xsd:element ref="feature" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- PresenterHasFeatures Moniker -->
  <xsd:element name="presenterHasFeaturesMoniker" abstract="true" type="PresenterHasFeaturesMoniker" />
  <xsd:complexType name="PresenterHasFeaturesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PresenterHasFeatures instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ActorHasEvents -->
  <xsd:element name="actorHasEvents" abstract="true" type="ActorHasEvents" />
  <xsd:complexType name="ActorHasEvents" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Event -->
      <xsd:element ref="event" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ActorHasEvents Moniker -->
  <xsd:element name="actorHasEventsMoniker" abstract="true" type="ActorHasEventsMoniker" />
  <xsd:complexType name="ActorHasEventsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ActorHasEvents instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ActorHasActions -->
  <xsd:element name="actorHasActions" abstract="true" type="ActorHasActions" />
  <xsd:complexType name="ActorHasActions" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Action -->
      <xsd:element ref="action" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ActorHasActions Moniker -->
  <xsd:element name="actorHasActionsMoniker" abstract="true" type="ActorHasActionsMoniker" />
  <xsd:complexType name="ActorHasActionsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ActorHasActions instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- FeatureReferencesEvent -->
  <xsd:element name="featureReferencesEvent" abstract="true" type="FeatureReferencesEvent" />
  <xsd:complexType name="FeatureReferencesEvent" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Event -->
      <xsd:element ref="eventMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- FeatureReferencesEvent Moniker -->
  <xsd:element name="featureReferencesEventMoniker" abstract="true" type="FeatureReferencesEventMoniker" />
  <xsd:complexType name="FeatureReferencesEventMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FeatureReferencesEvent instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- FeatureReferencesActions -->
  <xsd:element name="featureReferencesActions" abstract="true" type="FeatureReferencesActions" />
  <xsd:complexType name="FeatureReferencesActions" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Action -->
      <xsd:element ref="actionMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- FeatureReferencesActions Moniker -->
  <xsd:element name="featureReferencesActionsMoniker" abstract="true" type="FeatureReferencesActionsMoniker" />
  <xsd:complexType name="FeatureReferencesActionsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FeatureReferencesActions instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- PresenterHasPropertyCollection -->
  <xsd:element name="presenterHasPropertyCollection" abstract="true" type="PresenterHasPropertyCollection" />
  <xsd:complexType name="PresenterHasPropertyCollection" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end PropertyCollection -->
      <xsd:element ref="propertyCollection" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- PresenterHasPropertyCollection Moniker -->
  <xsd:element name="presenterHasPropertyCollectionMoniker" abstract="true" type="PresenterHasPropertyCollectionMoniker" />
  <xsd:complexType name="PresenterHasPropertyCollectionMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PresenterHasPropertyCollection instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- PropertyCollectionHasProperties -->
  <xsd:element name="propertyCollectionHasProperties" abstract="true" type="PropertyCollectionHasProperties" />
  <xsd:complexType name="PropertyCollectionHasProperties" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Property -->
      <xsd:element ref="property" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- PropertyCollectionHasProperties Moniker -->
  <xsd:element name="propertyCollectionHasPropertiesMoniker" abstract="true" type="PropertyCollectionHasPropertiesMoniker" />
  <xsd:complexType name="PropertyCollectionHasPropertiesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for PropertyCollectionHasProperties instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- Enum TypeNameEnumeration -->
  <xsd:simpleType name="TypeNameEnumeration">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Boolean">
        <xsd:annotation>
          <xsd:documentation>Boolean</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Byte">
        <xsd:annotation>
          <xsd:documentation>Byte</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Char">
        <xsd:annotation>
          <xsd:documentation>Char</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Date">
        <xsd:annotation>
          <xsd:documentation>Date</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="DateTime">
        <xsd:annotation>
          <xsd:documentation>DateTime</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Decimal">
        <xsd:annotation>
          <xsd:documentation>Decimal</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Double">
        <xsd:annotation>
          <xsd:documentation>Double</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Enum">
        <xsd:annotation>
          <xsd:documentation>Enum</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Int16">
        <xsd:annotation>
          <xsd:documentation>Int16</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Int32">
        <xsd:annotation>
          <xsd:documentation>Int32</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Int64">
        <xsd:annotation>
          <xsd:documentation>Int64</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Object">
        <xsd:annotation>
          <xsd:documentation>Object</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Single">
        <xsd:annotation>
          <xsd:documentation>Single</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="String">
        <xsd:annotation>
          <xsd:documentation>String</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Structure">
        <xsd:annotation>
          <xsd:documentation>Structure</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="UserDefinedReferenceType">
        <xsd:annotation>
          <xsd:documentation>User defined complex reference type (non-value type), e.g. CustomerDataContract</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="UserDefinedValueType">
        <xsd:annotation>
          <xsd:documentation>User defined value type</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  
</xsd:schema>

